package senior.ListExer;

import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Random;

/**
 * @author shkstart
 * @creat 2022-04-15:44
 */
public class ListExer5 {
    public static void main(String[] args) {
        List linkedList = new LinkedList();
        for (int i = 0;i < 10;i++){
            Random random = new Random();
            linkedList.add(random.nextInt(100));
        }
        System.out.println("随机生成10个数：");
        Iterator iterator = linkedList.iterator();
        while (iterator.hasNext()) {
            Object next =  iterator.next();
            System.out.print(next + "\t");

        }
        System.out.println("\n删除之后：");
        for(int i = 0;i < linkedList.size();i++){
            if((Integer) linkedList.get(i) % 2 == 0){
                linkedList.remove(i);
                //移除此列表中指定位置处的元素后，
                // 将任何后续元素向左移（从索引中减 1）
                i--;
            }
        }
        Iterator iterator1 = linkedList.iterator();
        while (iterator1.hasNext()) {
            Object next =  iterator1.next();
            System.out.print(next + "\t");

        }

        // 原理：迭代器在遍历时直接访问集合中的内容，并且在遍历过程中使用一个modCount变量。
        // 集合在被遍历期间如果内容发生变化，就会改变modCount的值。每当迭代器使用hashNext/next遍历
        // 下一个元素之前，都会检测modCount变量是否为expectedmodCount值，是的话就返回遍历；
        // 否则抛出异常，终止遍历。
        //错误原因：迭代器遍历时不能更改modCount变量
//        Iterator iterator = linkedList.iterator();
//        while (iterator.hasNext()) {
//            Object next =  iterator.next();
//            if((Integer) next % 2 == 0){
//                linkedList.remove(next);
//            }
//
//        }



    }
}
